#import <WebKit/WebKit.h>
#import <AVFoundation/AVFoundation.h>

/**
 课堂中用户的一些操作的callback
 **
 */

//课堂中用户点击选择图片后的回调
typedef void (^PlasoWKWebView_onSelectPic)(void);

//课堂中用户点击拍照后的回调
typedef void (^PlasoWKWebView_onTakePhoto)(void);

//课堂中用户点击离开的回调
typedef void (^PlasoWKWebView_onClose)(void);

//课堂中用户点击云盘文件的回调
// id 可以是JSON字符串，或者可以满足[NSJSONSerialization isValidJSONObject:]的 NSArray 或者 NSDictionay 对象
// [
//     {
//         myid, [string]必须
//         name, [string]必须(后缀只能为ppt、pptx)
//         path, [string]必须
//         type, [int]必须 目前只支持1
//         createTime, [int]时间戳
//         duration,[int] 单位秒
//         size,[int]单位：B
//     },
// ]
typedef void (^PlasoWKWebView_onCloudDisk)(void (^)(id));

@class PlasoWKWebView;
@protocol PlasoWKWebViewDelegate <NSObject>

@optional

/// 用户权限状态改变
/// @param webView PlasoWKWebView 对象
/// @param status 1 << 0: 语音，1<<1, 手写， 1<< 2 视频
- (void)plasoWebView:(PlasoWKWebView *)webView didUserStatusChanged:(NSInteger)status;

/// 用户分数改变
/// @param webView PlasoWKWebView 对象
/// @param score 改变后的分数
- (void)plasoWebView:(PlasoWKWebView *)webView didUserScoreUpdate:(NSInteger)score;

/// 开始倒计时
/// @param webView PlasoWKWebView 对象
/// @param duration 倒计时的秒数
- (void)plasoWebView:(PlasoWKWebView *)webView didStarCountdownWithDuration:(NSInteger)duration;

/// 开始答题
/// @param webView PlasoWKWebView 对象
/// @param questionIndex 问题序号
/// @param answerCount 答案个数
/// @param correctAnswer 正确答案
- (void)plasoWebView:(PlasoWKWebView *)webView examStartWithQuestionIndex:(int)questionIndex answerCount:(int)answerCount correctAnswer:(NSArray *)correctAnswer;

/// 结束答题
/// @param webView PlasoWKWebView 对象
/// @param questionIndex 问题序号
/// @param correctAnswer 正确答案
- (void)plasoWebView:(PlasoWKWebView *)webView examEndWithQuestionIndex:(int)questionIndex correctAnswer:(NSArray *)correctAnswer;

/// 提交答案
/// @param webView PlasoWKWebView 对象
/// @param questionIndex 问题序号
/// @param answer 提交的答案
- (void)plasoWebView:(PlasoWKWebView *)webView examCommitAnswerWithQuestionIndex:(int)questionIndex answer:(NSArray *)answer;

/// WebView中显示dialog
/// @param webView PlasoWKWebView 对象
/// @param show 显示Dialog
- (void)plasoWebView:(PlasoWKWebView *)webView didShowDialog:(BOOL)show;

/// WebView中PPT开始/结束播放
/// @param webView PlasoWKWebView 对象
/// @param playing 开始/结束播放
- (void)plasoWebView:(PlasoWKWebView *)webView didPPTPlaying:(BOOL)playing;

/// WebView中屏幕共享的打开和关闭
/// @param webView PlasoWKWebView 对象
/// @param open 屏幕共享已打开/已关闭
- (void)plasoWebView:(PlasoWKWebView *)webView didScreenShareOpen:(BOOL)open;

/// SDKLog
/// @param log 传递的日志内容，可以自行记录到自己的日志中
- (void)plasoSDKLog:(NSString *)log;

/// SDKLog 用户点击日志上传
/// @param meetingId 会议ID
- (void)plasoSDKUploadLogWithMeetingId:(NSInteger)meetingId;

@end

/**
 创建一个 PlasoWKWebView ，把它放到合适的位置，就可以开启实时课堂之路
 */
@interface PlasoWKWebView : WKWebView

@property (readonly,nonatomic) NSString* queryStr;

@property (nonatomic, copy)NSString *oemName;

@property (nonatomic, weak) id<PlasoWKWebViewDelegate> plasoDelegate;

@property (copy, nonatomic) PlasoWKWebView_onSelectPic onSelectPicCallback;
@property (copy, nonatomic) PlasoWKWebView_onTakePhoto onTakePhotoCallback;
@property (copy, nonatomic) PlasoWKWebView_onClose onCloseCallback;
@property (copy, nonatomic) PlasoWKWebView_onCloudDisk onCloudDisk;

/// 共享屏幕视图的左侧偏移量，默认是工具栏宽度 = 50（仅手机端界面可用）
@property (nonatomic) CGFloat shareScreenViewXOffset;


/// 视频实时课堂，当前设备的摄像头方向
@property (nonatomic, assign, readonly) AVCaptureDevicePosition cameraPosition;

@property (nonatomic, assign, readonly) BOOL mirrorMode;//YES:镜像模式 NO:非镜像模式
//请使用一下的初始化方法
//eg:appId=axd&userName=白娘子  注意：queryString正确的姿势应该是参数经过签名的，请参考文档

/**
 初始化 PlasoWKWebView
 \param frame PlasoWKWebView的大小
 \param urlStr 经过签名的课堂地址字符串
 \return PlasoWKWebView对象，将它放到合适的位置
 */
- (instancetype)initWithFrame:(CGRect)frame urlString:(NSString*)urlStr;

/**
 初始化 PlasoWKWebView，创建的 PlasoWKWebView 的frame为 CGRectZero，需要自行设置frame
 \param urlStr 经过签名的课堂地址字符串
 \return PlasoWKWebView对象，将它放到合适的位置
 */
- (instancetype)initWithURLString:(NSString*)urlStr;


/**
 进入实时课堂，在进入前请检查queryStr有没有设置，如果没有设置queryStr程序会NSAssert(NO)退出
 */
- (void)connectToLiveclass;

/**
 退出实时课堂后，调用disconnect清理一下内存
 //When connection closed ,it will post notification "RTCPeerConnection_close"
 */
- (void)disconnect;
/**
 退出实时课堂后，调用disconnect清理一下内存
 When connection closed ,it will post notification "RTCPeerConnection_close"
 \param code 退出课堂的错误码 1，主动登出；op:2 表示客户端提示用户退出;  3: 表示用户按了home键, 程序代为退出  4: 用户杀程序退出;
 */
- (void)disconnectWithCode:(NSInteger)code;

//
/**
 将用户选择的图片插入到课堂中
 \param imageBase64StrArray 经过base64编码的图片data字符串，尽量控制图片大小
 */
- (void)addImageToLiveclassWithBase64StrArray:(NSArray <NSString *>*)imageBase64StrArray;


/// 切换视频实时课堂前后置摄像头
/// @param position AVCaptureDevicePosition 枚举值
- (BOOL)switchCameraWithCameraPosition:(AVCaptureDevicePosition)position;

/// 切换镜像模式
/// @param mirror 镜像
- (void)switchMirror:(BOOL)mirror;


/// 静默本地音频
/// @param muted 静默
- (void)muteLocalAudio:(BOOL)muted;


/// 静默本地视频
/// @param muted 静默
- (void)muteLocalVideo:(BOOL)muted;

/// 随堂测：发送学生提交的答案
/// @param answer 学生的答案（0-7）
/// @param questionIndex 题号
- (void)sendAnswer:(NSArray *)answer withQuestionIndex:(int)questionIndex;

@end

@interface PlasoWKWebView(Deprecated)

@end
